/**
 * 
 */
package com.proyecto.histoclin.modelo.servicios;

import java.util.List;

import org.hibernate.exception.ConstraintViolationException;

import com.proyecto.core.modelo.echo.constantes.TipoBusqueda;
import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.ServicioGenerico;
import com.proyecto.histoclin.modelo.dto.CorrelativosHistoclinId;
import com.proyecto.histoclin.modelo.dto.HistoclinAntesfamiperso;

/**
 * @author vico
 *
 */
public class ServicioHistoclinAntesfamiperso extends ServicioGenerico {

	/**
	 * 
	 */
	ServicioCorrelativosHistoclin servicioCorrelativosHistoclin;
	
	public ServicioHistoclinAntesfamiperso() {
		// TODO Auto-generated constructor stub
	}


	
	@Override
	public void incluir(Object pojo, boolean iniciaTransaccion) throws GeneralException {
		// TODO Auto-generated method stub
		

		HistoclinAntesfamiperso objHistoclinAntesfamiperso = (HistoclinAntesfamiperso)pojo;

		if (isValidacionActiva()){
			validacion.incluir(objHistoclinAntesfamiperso);
		}
		
		
		try {
			
			String proxNumero = servicioCorrelativosHistoclin.obtenerProximoNumeroComoString(
					new CorrelativosHistoclinId (objHistoclinAntesfamiperso.getId().getCiaopr(), "HC_ANTESFAMIPERS","antesfamipersocod" ) ,true);

			objHistoclinAntesfamiperso.getId().setAntesfamipersocod(Integer.parseInt(proxNumero) );

	
			super.incluir(objHistoclinAntesfamiperso, iniciaTransaccion);

		} catch (org.springframework.dao.DataIntegrityViolationException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.PropertyValueException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.datoRequeridoVacio");
			} else if (e.getMostSpecificCause() instanceof ConstraintViolationException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.registroDuplicado");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");

		} catch (org.springframework.dao.DataAccessResourceFailureException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.exception.JDBCConnectionException) {
				throw new GeneralException(
						"error." + claveProperties + ".conexion");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");
		} catch (Exception e) {
			System.err.println(":::ServicioHistoclinAntesfamiperso::: " + e.getMessage());
			if("advertencia.HistoriasClinicas.datosBasicos.HistoclinAntesfamiperso.modificar.BloqueoOptimista".equals(e.getMessage())){
				throw new GeneralException(	e.getMessage());
			}else{
				throw new GeneralException(
						"error." + claveProperties + ".desconocido");
			}
		}
		
	}

	public Integer capturarAlturaUterinaEsp(String[] atributo,Object[] valor){
		Integer au = -1;
		List listHistoclinAntesfamiperso = null;
		try {
			listHistoclinAntesfamiperso = this.buscarCatalogoPorPropiedad(atributo, valor, TipoBusqueda.OPE_IGUAL, false);
			if(listHistoclinAntesfamiperso.size() > 0){
				HistoclinAntesfamiperso objHistoclinAntesfamiperso = (HistoclinAntesfamiperso)listHistoclinAntesfamiperso.get(0);

				if(objHistoclinAntesfamiperso.getApgiEdadgestaxeco() == null || "".equals(objHistoclinAntesfamiperso.getApgiEdadgestaxeco()) 
				){
				}else{
					if(objHistoclinAntesfamiperso.getApgiEdadgestaxeco() >= 12.0){
						if(objHistoclinAntesfamiperso.getApgiEdadgestaxeco() >= 29.0){
							au	= objHistoclinAntesfamiperso.getApgiEdadgestaxeco().intValue() - 4;
						}else{
							au	= objHistoclinAntesfamiperso.getApgiEdadgestaxeco().intValue() - 2;	
						}
					}else{
						au=0;
					}
					
				}
				if(objHistoclinAntesfamiperso.getApgiEdadgesta()==null || "".equals(objHistoclinAntesfamiperso.getApgiEdadgesta()) 
						){
				}else{
					if(objHistoclinAntesfamiperso.getApgiEdadgesta()>=12){
						if(objHistoclinAntesfamiperso.getApgiEdadgesta() >= 29){
							au	= objHistoclinAntesfamiperso.getApgiEdadgesta().intValue() - 4;
						}else{
							au	= objHistoclinAntesfamiperso.getApgiEdadgesta().intValue() - 2;	
						}
					}else{
						au=0;
					}

					
				}
				
			}
		} catch (Exception e) {
			// TODO: handle exception
			System.err.println("e.capturarAlturaUterinaEsp: " + e.getMessage());
			System.err.println("au: " + au);
			au=0;
		}
		
		return au;
	}

	public Boolean ConsultarEdadGesta_condicionGestaEdad(String[] atributo,Object[] valor,Integer condicionEdadGest){
		Boolean eg = false;
		try {
			List listHistoclinAntesfamiperso = this.buscarCatalogoPorPropiedad(atributo, valor, TipoBusqueda.OPE_IGUAL, false);
			if(listHistoclinAntesfamiperso.size() > 0){
				HistoclinAntesfamiperso objHistoclinAntesfamiperso = (HistoclinAntesfamiperso)listHistoclinAntesfamiperso.get(0);


				if(objHistoclinAntesfamiperso.getApgiEdadgestaxeco()==null || "".equals(objHistoclinAntesfamiperso.getApgiEdadgestaxeco()) 
				){
				}else{
					if(objHistoclinAntesfamiperso.getApgiEdadgestaxeco() >= condicionEdadGest){
						eg=true;
					}
				}
				if(objHistoclinAntesfamiperso.getApgiEdadgesta()==null || "".equals(objHistoclinAntesfamiperso.getApgiEdadgesta()) 
						){
				}else{
					if(objHistoclinAntesfamiperso.getApgiEdadgesta()>=condicionEdadGest){
						eg=true;
					}
				}
				
			}
		} catch (Exception e) {
			// TODO: handle exception
			eg=false;
		}
		
		return eg;
	}
	public ServicioCorrelativosHistoclin getServicioCorrelativosHistoclin() {
		return servicioCorrelativosHistoclin;
	}

	public void setServicioCorrelativosHistoclin(
			ServicioCorrelativosHistoclin servicioCorrelativosHistoclin) {
		this.servicioCorrelativosHistoclin = servicioCorrelativosHistoclin;
	}

}
